import tkinter as tk
import ttkbootstrap as ttkb
from dao import init_database
from views import LoginView
from utils import log_debug, resource_path
import os
from app_state import app_state
from configs.config import WINDOW_CONFIG, FONT_CONFIG

class ExamApplication:
    def __init__(self):
        # 初始化数据库
        log_debug("正在初始化数据库...")
        init_database()
        
        # 启动主应用程序
        log_debug("正在启动模拟考试系统...")
        self.root = tk.Tk()

        self.font = FONT_CONFIG['login']
        # 创建全局样式实例，避免每次创建登录框时重新创建
        self.style = ttkb.Style(theme='solar')
        
        # 设置窗口属性
        self._setup_window()

        # 创建主视图
        # self.app = MainView(self.root, self)
        
    def _setup_window(self):
        # 立即隐藏窗口避免闪烁
        self.root.withdraw()
        
        # 设置窗口大小和位置
        width = WINDOW_CONFIG['main']['width']
        height = WINDOW_CONFIG['main']['height']
        self.root.geometry(f"{width}x{height}")
        
        # 禁止改变窗口大小
        self.root.resizable(False, False)
        
        # 将窗口放置在屏幕中央
        screen_width = self.root.winfo_screenwidth()
        screen_height = self.root.winfo_screenheight()
        x = (screen_width - width) // 2
        y = (screen_height - height) // 2
        self.root.geometry(f"{width}x{height}+{x}+{y}")
        
        # 设置窗口标题和图标
        self.root.title("业余无线电模拟考试系统 v2.1.3 By BA4RHH")
        icon_path = resource_path(os.path.join('icon', 'icon.ico'))
        if os.path.exists(icon_path):
            self.root.iconbitmap(icon_path)
    
    def create_login_frame(self):
        # 清空窗口
        for widget in self.root.winfo_children():
            widget.destroy()
            
        # 创建登录视图，使用已创建的样式实例
        login_view = LoginView(self.root, self, style=self.style)
        login_view.pack(fill="both", expand=True)

    def run(self):
        # 先显示登录界面
        self.create_login_frame()
        
        # 初始化完成后恢复窗口
        self.root.deiconify()
        
        # 启动主循环
        self.root.mainloop()

if __name__ == "__main__":
    application = ExamApplication()
    application.run()